package cn.vehicle.config;

import cn.vehicle.interceptor.JwtInterceptor;
import cn.vehicle.interceptor.PermissionInterceptor;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Spring MVC 配置类
 * <p>
 * 用于注册全局拦截器，如 JWT 鉴权与权限校验拦截器。
 * 通过实现 {@link WebMvcConfigurer} 接口，扩展 Spring MVC 的默认配置。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>注册 JWT 拦截器：校验用户登录状态与 Token 有效性；</li>
 *   <li>注册权限拦截器：基于角色或权限码进行访问控制；</li>
 *   <li>配置拦截路径与排除路径。</li>
 * </ul>
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Resource
    private JwtInterceptor jwtInterceptor;

    @Resource
    private PermissionInterceptor permissionInterceptor;

    /**
     * 注册自定义拦截器
     *
     * @param registry 拦截器注册中心
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册 JWT 拦截器，用于验证用户的登录状态与 Token 合法性
        registry.addInterceptor(jwtInterceptor)
                .addPathPatterns("/api/aa/**") // 拦截指定路径下的所有请求
                .excludePathPatterns("/api/user/login"); // 排除登录接口，不进行拦截

        // 注册权限拦截器，用于基于用户权限进行访问控制
        registry.addInterceptor(permissionInterceptor)
                .addPathPatterns("/api/aa/**") // 拦截指定路径下的所有请求
                .excludePathPatterns("/api/user/login"); // 排除登录接口，不进行拦截
    }
}
